package org.yaglyf.common.util;


import org.springframework.beans.BeanUtils;

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;

/**
 * Created by lenovo on 2016/8/24.
 *  User: yangqiang
 */
public class BeanUtil {
    /**
     * 属性赋值
     *
     * @param t 目标对象  空实体
     * @param o 源对象    实体已经有值
     * @return
     */
    public static <T> T copy(T t, Object o) {
        try {
            tranParam(o);
            BeanUtils.copyProperties(o, t);
        } catch (Exception e) {
        }
        return t;
    }
    /**
     * 属性赋值
     *
     * @param clzz 目标对象类
     * @param o    源对象    实体已经有值
     * @return
     */
    public static <T> T copy(Class<T> clzz, Object o) {
        T t = null;
        try {
            t = clzz.newInstance();
            return copy(t,o);
        } catch (Exception e) {
        }
        return t;
    }

    public static <T> List<T> copyList(Class<T> clzz, List list) {
        List<T> list1 = new ArrayList<>();
        try {
            for (Object o : list) {
                list1.add(copy(clzz, o));
            }
        } catch (Exception e) {
        }
        return list1;
    }

    /**
     * 对参数String空串进行转换
     * @param t       参数为  ""  转为  null
     * @param <T>
     * @return
     */
    public static <T> T tranParam(T t){
        Class<?> clazz = t.getClass();
        do {
            Field[] fields = clazz.getDeclaredFields();
            for (Field f : fields) {
                try {
                    String name = f.getName();             //参数名
                    f.setAccessible(true);                 //设置为可见
                    Class<?> type = f.getType();           //参数类型
                    if ("java.lang.String".equals(type.getName())) {
                        name = "get"+name.substring(0, 1).toUpperCase()+name.substring(1);
                        String str = (String)clazz.getMethod(name).invoke(t);
                        f.set(t , StringUtils.hasText(str) ? str.trim() : null);
                    }
                } catch (Exception e) {
                }
            }
            clazz = clazz.getSuperclass();
        } while (clazz != Object.class);
        return t;
    }


}
